/*
 *  Cero Project - Copyright   2006 The Cero Developement Team 
 *  (Michael Laguerre, Camille Roux, Matthieu Segret, Mathieu Sivade) 
 * 
 *  This program is free software; you can redistribute it and/or modify it 
 *  under the terms of the GNU General Public License as published by the Free 
 *  Software Foundation; either version 2 of the License, or (at your option) 
 *  any later version.
 * 
 *  This program is distributed in the hope that it will be useful, but 
 *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 *  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
 *  for more details.
 */

package org.ceroproject.ui.commandline;

/**
 * Classe abstraite repr�sentant une commande. Les commandes sont des singletons
 * qui poss�dent un comportement appliqu� � des param�tres via la fonction
 * ex�cuter. Chaque commande est identifi�e par un nom.
 * 
 * @author Mathieu Sivade
 */
public abstract class Command {
	/** Nom de la commande */
	private String nom;

	/**
	 * Construit la Commande de nom 'nom'
	 * 
	 * @param nom
	 *            Nom de la commande
	 */
	protected Command(String nom) {
		this.nom = nom;
	}

	// Force les Commande � donner une d�finition explicite de leur utilit�
	/**
	 * Retourne une description de ce que fait la commande
	 * 
	 * @return Une description de ce que fait la commande
	 */
	public abstract String toString();

	/**
	 * Renvoie le nom de la commande
	 * 
	 * @return Le nom de la commande
	 */
	public String getNom() {
		return nom;
	}

	/**
	 * Execute les param�tres sp�cifi�s dans l'argument 'parametres'. Chaque
	 * commande appliquera son comportement � ces param�tres.
	 * 
	 * @param parametres
	 *            String pouvant contenir un nombre quelconque de mots
	 * @return vrai si la commande a �t� "productive", c'est � dire qu'elle a
	 *         fait avance le joueur dans sa mission, et faux sinon
	 */
	public abstract boolean executer(String parametres);
	
	/**
	 * Return the help of the command
	 * 
	 * @return Return the help of the command
	 */
	public abstract String help();
}
